#include "../../include/loginAuth.h"

//创建用户 sudo useradd -m 用户名   
//设置密码 sudo passwd 用户名

//gcc loginTest.c initUserPath.c loginAuth.c -o loginTest -g -Wall -lcrypt
//sudo ./loginTest meng 123

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "用法: sudo %s <你的用户名> <你的密码>\n", argv[0]);
        fprintf(stderr, "注意: 需要 sudo 权限才能读取 /etc/shadow 文件。\n");
        return 1;
    }

    char *valid_user = argv[1];
    char *valid_pass = argv[2];
    char result_buf[256];
    int ret;

    printf("==========================================\n");
    printf("        login_auth 函数测试开始\n");
    printf("==========================================\n\n");

    // --- 测试场景 1: 成功认证 ---
    printf("--- 场景 1: 测试有效用户名和密码 ---\n");
    printf("用户名: %s\n", valid_user);
    ret = login_auth(valid_user, valid_pass, result_buf, sizeof(result_buf));
    printf("函数返回值: %d (期望值: 0)\n", ret);
    printf("返回信息: %s\n", result_buf);
    if (ret == 0) {
        printf("结果: ✅ 测试通过\n");
    } else {
        printf("结果: ❌ 测试失败\n");
    }
    printf("--------------------------------------\n\n");


    // --- 测试场景 2: 密码错误 ---
    printf("--- 场景 2: 测试有效用户名和错误密码 ---\n");
    printf("用户名: %s\n", valid_user);
    const char* invalid_pass = "this_is_a_wrong_password_123!@#";
    ret = login_auth(valid_user, invalid_pass, result_buf, sizeof(result_buf));
    printf("函数返回值: %d (期望值: -1)\n", ret);
    printf("返回信息: %s\n", result_buf);
    if (ret == -1) {
        printf("结果: ✅ 测试通过\n");
    } else {
        printf("结果: ❌ 测试失败\n");
    }
    printf("--------------------------------------\n\n");

    
    // --- 测试场景 3: 用户不存在 ---
    printf("--- 场景 3: 测试一个不存在的用户 ---\n");
    const char* non_existent_user = "user_that_does_not_exist_qwerty";
    printf("用户名: %s\n", non_existent_user);
    ret = login_auth(non_existent_user, "any_password", result_buf, sizeof(result_buf));
    printf("函数返回值: %d (期望值: -1)\n", ret);
    printf("返回信息: %s\n", result_buf);
    if (ret == -1) {
        printf("结果: ✅ 测试通过\n");
    } else {
        printf("结果: ❌ 测试失败\n");
    }
    printf("--------------------------------------\n\n");

    return 0;
}
